#ifndef FUNCTIONS_H
#define FUNCTIONS_H

#include "structs.h"
#if defined(__GNUC__)
#include <unistd.h>
#else
#include <Windows.h>
#endif

/* Gera num aleatorio de 0 a limite 
 * @entrada:
 *    limite: limite superior para o valor do numero gerado
 */
int num_aleatorio(int limite){
  return rand()%(limite+1);
}

/* adiciona novo aluno a fila a cada intervalo frequencia
 * com variacao + ou - um numero aleatorio
 *  @entradas:
 *    fila: ponteiro para a fila utilizada
 *    duracao: a duracao do intervalo,em minutos
 *    frequencia: a frequencia de chegada,em segundos
 *    variacao: a variacao da frequencia,em segundos
 */
void chegada_alunos(Fila* fila,int duracao,int frequencia,int variacao,bool saida = false){
  int inicio = fila->relogio;
  int contador = 0;
  srand ( (unsigned)time(NULL));
  rand(); rand(); rand();
  do{
      /* calcula variacao */
      int sinal = num_aleatorio(1);
      int var = num_aleatorio(variacao);
      if(sinal < 1)
        var = -var;
      for(int i = 0;i < var+frequencia;i++){
        contador++;
        fila->relogio++;
        if(contador % 4 == 0 && saida)
          for(int j=0; j< fila->atendentes; j++)
            remover(fila);
      }
      adiciona(fila);
  }while(fila->relogio - inicio < duracao*60);
  fila->relogio++;
}

/* remove novo aluno da fila
 *  @entradas:
 *    fila: ponteiro para a fila utilizada
 *    duracao: a duracao do intervalo,em minutos
 */
int input(){
  printf("Digite abaixo o numero de atendentes:\n");
  printf("_>");
  int ret;
  scanf("%d",&ret);
  return ret;
}

#endif // FUNCTIONS_H
